import pycuda.driver as cuda
import pycuda.autoinit  # 不要使用这个

import pycuda.gpuarray as gpuarray
import numpy as np



device = cuda.Device(0)  # 使用第一个GPU
context = device.make_context()

# 1. 在 CPU 上创建 NumPy 数组
a_cpu = np.array([1, 2, 3], dtype=np.float32)
b_cpu = np.array([4, 5, 6], dtype=np.float32)


# 2. 将数组拷贝到 GPU，创建 GPUArray
a_gpu = gpuarray.to_gpu(a_cpu)
b_gpu = gpuarray.to_gpu(b_cpu)

# 3. 在 GPU 上执行点积运算
result_gpu = gpuarray.dot(a_gpu, b_gpu)

# 4. 将结果从 GPU 拷贝回 CPU
result_cpu = result_gpu.get()

print(f"CPU 计算结果 (numpy.dot): {np.dot(a_cpu, b_cpu)}")
print(f"GPU 计算结果 (gpuarray.dot): {result_cpu}")

# 输出:
# CPU 计算结果 (numpy.dot): 32.0
# GPU 计算结果 (gpuarray.dot): 32.0
